<template>
  <view class="app-container">
    <!-- 底部导航（默认显示，无需登录也可见） -->
    <view class="tab-bar">
      <view 
        class="tab-bar-item" 
        :class="{active: currentTab === 'home'}" 
        @click="switchTab('/pages/shop/shop', 'home')"
      >
        <view class="tab-bar-icon">🏠</view>
        <view>首页</view>
      </view>
      <view 
        class="tab-bar-item" 
        :class="{active: currentTab === 'orders'}" 
        @click="switchTab('/pages/orders/orders', 'orders')"
      >
        <view class="tab-bar-icon">📋</view>
        <view>抢单大厅</view>
      </view>
      <view 
        class="tab-bar-item" 
        :class="{active: currentTab === 'profile'}" 
        @click="switchTab('/pages/profile/profile', 'profile')"
      >
        <view class="tab-bar-icon">👤</view>
        <view>个人中心</view>
      </view>
    </view>
  </view>
</template>

<script setup>
import { ref, watch, onMounted, onUnmounted } from 'vue'

// 1. 当前页面路径状态
const currentPath = ref('/pages/shop/shop')

// 2. 登录状态：仅用于个人中心等页面判断，不影响默认进入
const getLoginStatus = () => {
  try {
    const userInfo = uni.getStorageSync('userInfo')
    return !!userInfo && typeof userInfo !== 'string'
  } catch (e) {
    return false
  }
}
const hasLogin = ref(getLoginStatus())

// 3. Tab状态：默认选中首页（匹配需求）
const currentTab = ref('home')

// 4. 存储检查定时器
let storageCheckTimer = null

// 5. 页面加载时：检查登录状态，未登录则跳转登录页
onMounted(() => {
  // 延迟执行确保页面完全加载
  setTimeout(() => {
    checkLoginAndRedirect()
  }, 100)
  
  startStorageWatcher() // 启动存储监听器
  console.log('App 初始化完成，检查登录状态')
})

// 6. 组件卸载时清理定时器
onUnmounted(() => {
  if (storageCheckTimer) {
    clearInterval(storageCheckTimer)
  }
})

// 7. 检查登录状态并跳转
const checkLoginAndRedirect = () => {
  console.log('检查登录状态')
  // 检查用户是否已登录
  if (!getLoginStatus()) {
    console.log('未登录，跳转到登录页面')
    // 未登录，跳转到登录页面
    uni.redirectTo({ 
      url: '/pages/login/login',
      fail: (err) => {
        console.error('跳转登录页失败:', err)
      }
    })
  } else {
    console.log('已登录，设置默认页面')
    // 已登录，设置默认页面
    setDefaultPage()
  }
}

// 8. 核心：设置默认页面为首页（已登录情况下）
const setDefaultPage = () => {
  // 获取当前页面栈
  const pages = getCurrentPages()
  if (pages.length > 0) {
    const currentPage = pages[pages.length - 1]
    currentPath.value = '/' + currentPage.route
  }
  
  // 只有在当前路径不是有效页面时才自动跳转到首页
  const validPaths = [
    'pages/shop/shop',
    'pages/orders/orders', 
    'pages/profile/profile',
    'pages/login/login',
    'pages/create-order/create-order',
    'pages/order-detail/detail',
    'pages/order-evaluation/order-evaluation',
    'pages/map/map'
  ];
  
  const isCurrentPathValid = validPaths.some(path => currentPath.value.includes(path));
  
  if (!isCurrentPathValid) {
    uni.switchTab({ url: '/pages/shop/shop' })
  }
}

// 9. 监听路由变化：实时更新当前选中的Tab
watch(
  () => currentPath.value,
  (newPath = '/pages/shop/shop') => { // 兜底：默认首页路径
    if (newPath.includes('shop')) {
      currentTab.value = 'home'
    } else if (newPath.includes('orders')) {
      currentTab.value = 'orders'
    } else if (newPath.includes('profile')) {
      currentTab.value = 'profile'
    }
  },
  { immediate: true } // 初始加载时立即执行，确保Tab选中状态正确
)

// 10. 切换Tab：无需登录拦截，直接跳转（仅个人中心后续可加登录判断）
const switchTab = (url, tabName) => {
  // 检查目标页面是否需要登录
  const needLogin = url.includes('orders') || url.includes('profile')
  
  if (needLogin && !getLoginStatus()) {
    // 需要登录但未登录，跳转到登录页
    uni.navigateTo({ 
      url: '/pages/login/login',
      success: () => {
        // 可以传递目标页面参数，登录成功后跳转
        console.log('跳转到登录页，目标：', url)
      }
    })
    return
  }
  
  // 更新选中状态并切换路由（使用switchTab确保Tab页正确切换）
  currentTab.value = tabName
  uni.switchTab({ 
    url,
    fail: (err) => {
      // 若switchTab失败（非Tab页配置），降级用navigateTo
      uni.navigateTo({ url })
      console.warn('Tab切换失败，已降级跳转：', err)
    }
  })
}

// 11. 启动存储监听器：定期检查存储变化
const startStorageWatcher = () => {
  // 先检查一次初始状态
  checkStorageChange()
  
  // 启动定时器定期检查
  storageCheckTimer = setInterval(() => {
    checkStorageChange()
  }, 1000) // 每秒检查一次
}

// 12. 检查存储变化
const checkStorageChange = () => {
  try {
    const userData = uni.getStorageSync('userInfo')
    if (userData) {
      const parsedData = typeof userData === 'string' ? JSON.parse(userData) : userData
      hasLogin.value = !!parsedData
    } else {
      hasLogin.value = false
    }
  } catch (e) {
    hasLogin.value = false
  }
}

// 13. 监听App显示/隐藏：仅更新登录状态，不影响默认页面
uni.onAppShow(() => {
  console.log('App 切换到前台')
  hasLogin.value = getLoginStatus()
  checkStorageChange()
  
  // 更新当前路径
  const pages = getCurrentPages()
  if (pages.length > 0) {
    const currentPage = pages[pages.length - 1]
    currentPath.value = '/' + currentPage.route
  }
  
  // 每次App显示时都检查登录状态
  checkLoginAndRedirect()
})

uni.onAppHide(() => {
  console.log('App 切换到后台')
})
</script>